package com.wgy.day39.反射.Class对象的获取方式;

import com.wgy.day39.domain.Person;
import com.wgy.day39.domain.Student;

/**
 * Created by pc on 2020/12/15 20:14
 * Description: LearningJava
 */
/*
反射:框架设计的灵魂
框架:半成品软件,可以在框架的基础上进行软件开发,简化代码
反射:将类的各个组成部分封装为其他对象,这就是反射机制
       好处: 1.可以在程序运行过程中,操作这些对象
            2.可以解耦,提高程序的可扩展性

获取class类对象的3种方式:
      1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
         *多用于配置文件,将类名定义在配置文件中.读取文件,加载类
      2.类名.class:通过类名的属性class获取
         *多用于参数的传递
      3.对象.getClass():  getClass()方法在Object类中定义的
         *多用于对象的获取字节码的方式

注意:同一个字节码文件(.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个

 */
public class Demo01Reflect {
    public static void main(String[] args) throws Exception {
        //获取Class类对象
        //1.Class.forName("全类名")的方式获取
        Class cls1 = Class.forName("com.wgy.day39.domain.Person");
        //2.类名.class的方式获取
        Class cls2 = Person.class;
        //3.对象.getClass()的方式获取
        Person p=new Person();
        Class cls3 = p.getClass();

       //比较 3个Class类对象
        System.out.println(cls1==cls2);//true ==号比较的是内存地址值
        System.out.println(cls1==cls3);//true

        Class<Student> cls4 = Student.class;
        System.out.println(cls1==cls4);//false


    }

}
